package www.webols.api;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import www.webols.utils.HttpsUtils;
import www.webols.utils.JSONDataException;
import www.webols.utils.WeiboException;
import android.util.Log;

/**
 * 
 * @author Paul Wang
 *
 */
public class FriendsTimeline extends WeiboAPI {
	public FriendsTimeline(String token, HttpsUtils httpsUtils) {
		super(token, httpsUtils);
		StringBuffer url=new StringBuffer();
		url.append(WEIBO_API_ROOT).append(WEIBO_API_PATH);
		this.apiUrl=url.toString();
	}



	/*
	 * {
    "statuses": [
        {
            "created_at": "Tue May 31 17:46:55 +0800 2011",
            "id": 11488058246,
            "text": "求关注。"，
            "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
            "favorited": false,
            "truncated": false,
            "in_reply_to_status_id": "",
            "in_reply_to_user_id": "",
            "in_reply_to_screen_name": "",
            "geo": null,
            "mid": "5612814510546515491",
            "reposts_count": 8,
            "comments_count": 9,
            "annotations": [],
            "user": {
                "id": 1404376560,
                "screen_name": "zaku",
                "name": "zaku",
                "province": "11",
                "city": "5",
                "location": "北京 朝阳区",
                "description": "人生五十年，乃如梦如幻；有生斯有死，壮士复何憾。",
                "url": "http://blog.sina.com.cn/zaku",
                "profile_image_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
                "domain": "zaku",
                "gender": "m",
                "followers_count": 1204,
                "friends_count": 447,
                "statuses_count": 2908,
                "favourites_count": 0,
                "created_at": "Fri Aug 28 00:00:00 +0800 2009",
                "following": false,
                "allow_all_act_msg": false,
                "remark": "",
                "geo_enabled": true,
                "verified": false,
                "allow_all_comment": true,
                "avatar_large": "http://tp1.sinaimg.cn/1404376560/180/0/1",
                "verified_reason": "",
                "follow_me": false,
                "online_status": 0,
                "bi_followers_count": 215
            }
        },
        ...
    ],
    "previous_cursor": 0,
    "next_cursor": 11488013766,
    "total_number": 81655
	}


	 */
	public static final String WEIBO_API_PATH="/2/statuses/friends_timeline.json";
	
	public static final String PARAM_SOURCE="source"; //申请应用时分配的AppKey，调用接口时候代表应用的唯一身份。（采用OAuth授权方式不需要此参数） 
	public static final String PARAM_SINCE_ID="since_id"; //int64  若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。 
	public static final String PARAM_MAX_ID="max_id"; //int64  若指定此参数，则返回ID小于或等于max_id的微博，默认为0。  
	public static final String PARAM_COUNT="count"; //int  单页返回的记录条数，默认为50。  
	public static final String PARAM_PAGE="page"; //返回结果的页码，默认为1。 
	public static final String PARAM_BASE_APP="base_app"; //int  是否只获取当前应用的数据。0为否（所有数据），1为是（仅当前应用），默认为0。 
	public static final String PARAM_FEATURE="feature"; //int  过滤类型ID，0：全部、1：原创、2：图片、3：视频、4：音乐，默认为0。  
	
	/**
	 * 转换该接口返回的数据为微博对象列表
	 * 
	 * @param json
	 * @return
	 * @throws JSONException
	 */
	//TODO  该方法和IO无关，可以剥离
	public List<WeiboItem> convertJSON(JSONObject json) throws JSONException{
		
		List<WeiboItem> items=new ArrayList<WeiboItem>();
		
		JSONArray statuses=json.getJSONArray("statuses");
		for(int i=0;i<statuses.length();i++){
			WeiboItem item=new WeiboItem();
			//json数据到WeiboItem对象转换
			JSONObject st=statuses.getJSONObject(i);
			item.setText(st.getString("text"));
			item.setId(st.getLong("id"));
			item.setSource(st.getString("source"));
			item.setStringCreateAt(st.getString("created_at"));
			if(st.has("thumbnail_pic"))
				item.setThumbnailPic(st.getString("thumbnail_pic"));
			JSONObject ut=st.getJSONObject("user");
			User user=new User();
			user.setScreenName(ut.getString("screen_name"));
			user.setId(ut.getLong("id"));
			item.setUser(user);
			items.add(item);
			
		}
		return items;
	}
	
	/**
	 * 返回处理过多的WeiboItem对象
	 * @return
	 */
	public List<WeiboItem> getWeiboItems(long sinceId,long count) throws WeiboApiError,JSONDataException,WeiboApiUnknowException{
		
		
		try {
			this.getParams().put("since_id", ""+sinceId);
			this.getParams().put("count", ""+count);
			JSONObject ftl=this.getResult();
			
			
			return this.convertJSON(ftl);
		} catch (JSONException e) {
			throw new JSONDataException(e);
		}
		
		
	}


	@Override
	public String getAPIPath() {
		return WEIBO_API_PATH;
	}
}
